package tech.aistar.day10.homework;

import sun.text.normalizer.UCharacter;

import java.util.LinkedList;
import java.util.Scanner;

/**
 * 本类用来演示: 括号匹配
 *
 * @author: success
 * @date: 2021/3/22 8:45 上午
 */
public class BracketDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入括号:>");
        String line = sc.nextLine();

        if(match(line)){
            System.out.println("匹配成功");
        }else{
            System.out.println("匹配失败");
        };
    }

    /**
     * ()[]{}
     * -> 字符数组 - ( ) [ ] { }
     *
     * LinkedList
     *
     * -> arr[0]压栈 -> list.push(arr[0]);
     *
     * ['(']
     *
     * 遍历arr,从第二个位置还是遍历
     *
     * @param line
     * @return
     */
    private static boolean match(String line) {
        //1. 字符串转成字符数组
        char[] arr = line.toCharArray();
        //2. 创建栈列
        LinkedList<Character> list = new LinkedList<>();
        //3. 将arr[0]压入栈顶
        list.push(arr[0]);
        //4. 从arr的第二个位置开始遍历

        //[ ( { } ) ] - arr
        //   - list

        //bug - ( ) [ ]{ }
        //[
        for (int i = 1; i < arr.length; i++) {
            //先获取arr当前i对应的内容
            Character c1 = arr[i];
            //获取栈顶的元素
            Character header = null;

            //加判断
            if(list.isEmpty()){//集合为空 - 栈顶并没有元素
                list.push(c1);
                continue;
            }else{
                header = list.getFirst();
            }

            //进行比较
            if((header.equals('[')&&c1.equals(']')) || (header.equals('(')&&c1.equals(')')) || (header.equals('{')&&c1.equals('}'))){
                //弹出栈顶元素
                list.pop();
            }else{
                //继续将arr[i]压入栈顶
                list.push(arr[i]);
            }
        }
        return list.isEmpty();
    }
}
